package cn.darkhorse.device.dto;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 设备
 * @author yuanjun
 * @since 2022/11/10 16:37
 */
@Data
@Accessors(chain = true)
public class MesDeviceDTO {
    /**
     * 设备所属部门列表（实际为id列表）
     * 例如： 1,2,3,4
     */
    String deviceDeptIds;

    /**
     * 设备状态，用于查询多种状态的情况
     */
    String deviceStatusIds;

    /**
     * 设备名称
     */
    @Size(min = 1, max = 50, message = "设备名称的长度在1到50之间")
    String name;

    /**
     * 设备状态（0：闲置1：启用）
     */
    Integer deviceStatus;

    /**
     * 设备负责人ID
     */
    @NotNull(message = "设备负责人不能为空")
    Long header;

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private Long id;

    /**
     * 所属部门
     */
//    @NotNull(message = "所属部门不能为空")
    private Long dept;

    /**
     * 班组Id
     */
    private String workTeam;

    /**
     * 设备编号
     */
    @Size(min = 1, max = 50, message = "设备编号的长度在1到50之间")
    private String code;

    /**
     * 设备类型
     */
    @NotNull(message = "设备类型不能为空")
    private Long type;

    /**
     * 设备代号
     */
//    @NotNull(message = "设备代号不能为空")
    private String mark;

    /**
     * 规格/型号
     */
//    @Size(min = 1, max = 50, message = "设备规格/型号的长度在1到50之间")
    private String model;

    /**
     * 维修负责人
     */
    @NotNull(message = "维修负责人不能为空")
    private Long repairHeader;

    /**
     * 保养负责人
     */
    @NotNull(message = "保养负责人不能为空")
    private Long upkeepHeader;

    /**
     * 操作人
     */
//    @NotNull(message = "操作人不能为空")
    private String operator;

    /**
     * 功率
     */
    private String power;

    /**
     * 系统
     */
    private String cncSystem;

    /**
     * 其他参数
     */
    private String otherParamters;

    /**
     * 制造商
     */
//    @Size(min = 1, max = 100, message = "制造厂的长度在1到50之间")
    private String producer;

    /**
     * 制造年份
     */
//    @NotNull(message = "制造年份不能为空")
    private Integer produceYear;

    /**
     * 制造月份
     */
    private Integer produceMoth;

    /**
     * 附件
     */
    private String attachments;

    /**
     * 用途说明/太平港此字段代表备注
     */
    @Size(min = 0, max = 140, message = "备注的长度在0到140之间")
    private String description;

    /**
     * 制单人
     */
//    @NotNull(message = "制单人不能为空")
    private Long creator;

    /**
     * 制单日期
     */
    private LocalDateTime gmtCreate;

    /**
     * 修改时间
     */
    private LocalDateTime gmtModify;

    /**
     * 制单部门
     */
//    @NotNull(message = "制单部门不能为空")
    private Long creatorDept;

    /**
     * 制单日期
     */
//    @NotNull(message = "制单日期不能为空")
    private LocalDateTime creatorDate;

    /**
     * 按制单日期排序，asc / desc
     */
    private String orderByGmtCreate;

    /**
     *  产能设备 0否 1是
     */
    private Integer isCapacityDevice;

    /**
     * 数据采集设备 0否 1是
     */
    @NotNull(message = "是否数据采集设备不能为空")
    private Integer isAcquisitionDevice;

    /**
     * 理论加工周期（单位min）
     */
    private BigDecimal theoreticalProcessingCycle;

    /**
     * 工段（字典项）
     */
    private String workshopSection;

    /**
     * 报警通知人
     */
    @NotNull(message = "报警通知人不能为空")
    private String alarmNotifier;

    /**
     * 数据设备id
     */
    private String dataDeviceId;

    @ApiModelProperty("tsp设备")
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Integer tspDevice;

    @ApiModelProperty("进港时间")
    private LocalDateTime harborEntryTime;

    private LocalDateTime beginHarborEntryTime;
    private LocalDateTime endHarborEntryTime;

    public static void main(String[] args) {
        MesDeviceDTO dto = new MesDeviceDTO();
        dto.setBeginHarborEntryTime(LocalDateTime.now());
        dto.setEndHarborEntryTime(LocalDateTime.now());
        dto.setType(1L);

        System.out.println(JSONObject.toJSONString(dto));
    }
}
